package com.shujia.java.day18.demo1;

import java.io.*;

public class CopyDir {
    public static void main(String[] args) throws Exception{
        copyDir("F:\\data", "G:\\data");


        System.out.println("这是main");
    }
    //首先目录的复制 (只能创建)
    public static void copyDir(String oldPath, String newPath) throws Exception {
        //new File
        File oldFile = new File(oldPath);// 源目录
        File newFile = new File(newPath);//复制目录
        //原目录 必须是个目录
        if (!oldFile.exists() || !oldFile.isDirectory()) {
            System.out.println("源目录不存在");
        }
        //复制目录
        if (!newFile.exists()) {
            //不存在创建
            newFile.mkdir();
        }
        System.out.println("这是CopyDir");
        //listFile 获取原目录中的子文件或子文件夹
        File[] oldFiles = oldFile.listFiles();
        for (File f : oldFiles) {
            //判断是否是目录  是目录就创建
            if (f.isDirectory()) {//比如 f:\data\test
                //拼接一个新的路径 进行创建
                String nPath = newPath + "\\" + f.getName();//g:\data\test
                //通过file对象 来创建
                File file = new File(nPath);
                file.mkdir();
                //是目录 创建并递归
                copyDir(f.getAbsolutePath(),nPath);
            }else {
                //要复制的源文件的路径
                f.getAbsolutePath();//获取绝对路径
                //复制文件 目的地的目录路径  和源文件的名称
                String nPath=newPath+"\\"+f.getName();
                //开始复制文件
                copyFile(f.getAbsolutePath(),nPath);
            }
        }
    }
    //复制文件
    public static void copyFile(String oldPath, String newPath)throws Exception{

        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(oldPath));//创建输入流 读
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newPath));//创建输出流 写
        byte[] bytes = new byte[1024];
        int len;//定义变量接收长度
        while ((len=bis.read(bytes))!=-1){
            bos.write(bytes,0,len);
        }
        //关闭流
        bos.close();
        bis.close();

    }
}
